본문으로 건너뛰기

Ch1. 스코프란 무엇인가

스코프란 변수를 어떻게 선언하고, 어떻게 참조할지를 정하는 규칙이다.


1.1 컴파일러 이론

자바스크립트는 인터프리터 언어지만 실행 전 다음 3단계를 수행한다:

  1. Tokenizing / Lexing: 의미 있는 단위(Token)로 코드 분해
  2. Parsing: AST(추상 구문 트리) 생성
  3. Code Generation: 실행 가능한 코드 생성

→ 이 과정을 통해 컴파일하고 실행


1.2 스코프 이해하기

실행 주체들

  • 엔진: 실행 책임
  • 컴파일러: 파싱/코드 생성 담당
  • 스코프: 변수 저장 및 참조 규칙 관리
var a = 2;
  • 컴파일러: a 선언 처리
  • 엔진: a = 2 실행

LHS vs RHS

  • LHS (Left-Hand Side): 대입 대상 변수 컨테이너 찾기
  • RHS (Right-Hand Side): 변수 값 읽기
a = 2; // a → LHS
console.log(a) // a → RHS

예제 분석

function foo(a) {
var b = a;
return a + b;
}
var c = foo(2);
  • LHS 검색: a (파라미터), b, c
  • RHS 검색: foo, a, b, a, b

1.3 중첩 스코프

function foo(a) {
console.log(a, b);
}
var b = 2;
foo(3);
  • a: 함수 내부에서 찾음
  • b: 없으니 외부 스코프에서 찾음
  • 최종적으로 글로벌 스코프까지 찾음

1.4 오류

  • RHS 실패: ReferenceError (변수 없음)
  • LHS 실패: 암묵적으로 글로벌 변수 생성 (strict mode에서는 ReferenceError)
  • 존재하지만 잘못 사용: TypeError
x; // ReferenceError
x = 3; // 글로벌 변수 생성됨 (비엄격 모드)
null.f(); // TypeError

1.5 정리

  • 스코프는 변수 선언/참조 규칙을 정의한다
  • 자바스크립트는 실행 전 컴파일 단계를 거친다
  • LHS vs RHS 개념을 명확히 구분해야 한다
  • strict mode에서는 암묵적 글로벌 변수 생성을 방지할 수 있다